約 4,990,132 件
https://w.atwiki.jp/saintsrowthethird/pages/24.html
アクティビティーよりも軽い感じのミニゲーム。 何かしらのアクションをして、表示される開始ボタンを押すことでミニゲームがスタートする。 しかし格闘、運転デバージョンなどに関しては、ゲームをプレイ中にいつでもカウントされる。 格闘デバージョン 特殊な方法で敵を倒し続けるとリスペクトに変換されるシステム。 例えばヘッドショットを連続ですればするほど、多くのリスペクトを得ることができる。 スタントデバージョン 特殊な運転を維持するとリスペクトに変換されるシステム。 例えば、ドリフトを長時間維持すればするほど、多くのリスペクトを得ることができる。 ストリーキング 全裸(ただし日本版は下着)になっている状態で十字ボタンの下を2回押すとスタート。 制限時間内に指定された人数分の歩行者に全裸を披露する。 隠しアイテム収集 街中に隠されたアイテムを集める。 飛行機スタント 飛行機でスタントをする。 人質(ハイジャック) 奪った乗り物の助手席に人がいる状態で、ボタンを押すことでスタート。 制限時間までスピードを維持したまま警察から逃げると身代金が取れる。 Yボタンを押した時点で実績の人数がカウントされるので 律儀に制限時間まで逃げきらなくてもよい。 パラシュート降下 高い場所からダイブし、パラシュートを開いている状態でボタンを押すことでスタート。 指定された場所に着地できれば成功。 店舗強盗 店の店員に銃を向け続け、金を奪う。 協力プレイ専用「キャットアンドマウス」(乗り物鬼ごっこ) 協力プレイ専用「Death Tag」(1対1のデスマッチみたいなもの) 車の屋根から屋根へと飛び移る「ビークルサーフィン」 次から次へと大量に押し寄せる敵を倒し続ける「サバイバル」 +25/26から埋まらない人へ※ネタバレ注意 最後のサバイバルはゾンビが出現するまでアンロックされないので 全ミッションクリア後にでも ギャングオペレーション(抗争スポット) 前の情報ではフラッシュポイントとも呼ばれていた。 敵ギャングが活動している溜り場で、そこにいる敵を全て一掃することでクリア。 報酬は支配度アップ、リスペクト、金。 前作の拠点襲撃とは異なり、始めから敵がマップに配置されている。 全部で32ヶ所存在。 アイコンは赤い背景に拳マーク。
https://w.atwiki.jp/gameindex/pages/80.html
「バージョン分け商法」「ポケモン商法」とも。 一つの作品を複数のバージョンに分けて販売すること。分割販売と違うのはそれぞれのソフトで「イベントの内容が違う・手に入る道具が違う」といった差異があるのみということで、ストーリーや基本システムに大きな違いがないことが多い。 草分け的存在は『ポケットモンスター』(ポケモン)である。 バージョン間の通信を前提とした要素(コレクションの完成など)が存在するのが普通である。というより、それがないバージョン分けは非難の対象になりやすい。 他プレイヤーとの交流がない者はソフトを複数購入する必要がある。 バージョンごとの対戦プレイの強さに明らかな優劣があることもあり、特定のバージョンだけが中古ショップに溢れかえるなんてことも。 バージョンごとの特色を活かしたプレイスタイルの多様化は通信プレイの醍醐味のひとつである。しかし一方で使いまわし・ボリューム水増しのごまかしや、複数買いによる利益向上を非難されることも多々ある。
https://w.atwiki.jp/emeditor/pages/33.html
2ストロークマクロ(ポップアップメニュー) ポップアップメニューを生かして2ストロークのショットカットでコマンドを 実行するマクロです。 Ctrl+xとかに割り当てると気分が良くなる人もいるかも。 添付のzipファイルを解凍し、My Macrosフォルダに入れてあげてください。 commands.jsee var fn = "\\commands.dat"; data = fRead(fn); menu = CreatePopupMenu(); for(var n in data){ if(data[n].title == "--"){ menu.Add( "", 0, eeMenuSeparator ); }else{ data[n].action = "( " + data[n].action + ")"; menu.Add(data[n].title +data[n].action, n); } } result = menu.Track( 0 ); for(var n in data){ if( result == n ) { try { eval(data[n].command); } catch(e) { alert("実行に失敗しました。コマンドを確認してください\n" + e); } } } function fRead(strFileName) { var FSO = new ActiveXObject("Scripting.FileSystemObject"); var i=0; var strData = new Array(); strFileName = FSO.GetParentFolderName(ScriptFullName) + strFileName FSOFile = FSO.OpenTextFile(strFileName,1); try { do { str = FSOFile.ReadLine(); if(str.charAt(0)!= "#"){ strData[i] = str; } i++; } while(FSOFile.AtEndOfStream==false); FSOFile.Close(); } catch(e) { Window.alert(e); } return parseData(strData); } function parseData(data){ var menu = new Object; for(var n in data){ var words = data[n].split("\t"); if(words.length 3){ if(words[0] == "--"){ menu[n] = { title "--" }; } }else{ menu[n] = { title words[0], action words[1], command words[2] } } } return menu; }commands.dat~ 行頭に--を入れるとセパレーターを作ります。 コマンドはemeditorマクロのコマンドを記述してください。 誰か適度に補完してもらえるとうれすぃです。 wiki編集するかコメントにどの動作で、どのショートカットかを明記してください。 #**********コマンドマクロ************** #ポップアップメニューのコマンドを作成し、擬似的に2ストロークにします。 #行頭の#はコメント行と見なします。また、空白行も無視します。 #表示名キーボードショートカット(一文字半角英数)コマンド(Emeditor) ファイルを開くFeditor.ExecutecommandById(4097) 上書き保存Sdocument.Save() -- 名前をつけて保存Weditor.ExecuteCommandByID(4100) 閉じるKdocument.close() tommy T Change log 名前 コメント コメント 名前 コメント
https://w.atwiki.jp/yumenaruki/pages/50.html
https://w.atwiki.jp/videostudio/pages/49.html
旧バージョンの情報へのショートカットです。 公式ページ
https://w.atwiki.jp/makurosex/pages/54.html
このWikiを編集するにあたってのルールなど 新たにルールが追加されることがあるので、編集する場合は確認して下さい 勝手に項目内を消さないようにしましょう。 ページの内容を整理して見やすくするとき以外は内容を消すのはやめましょう。 荒らしとみなされる場合があります。 新しく項目を作成する場合は既に同じ内容の項目が建てられていないか確認しましょう。 上のメニューの「表示」→「このwikiのページ一覧」から確認できます。 基本的に@wikiモードで新規作成してください。 ページごとにフォーマットが違うと編集に支障をきたします。 ただしコメントなどの過去ログは例外としてワープロモードでの作成をお勧めします。 プラグインを使えばさまざまな機能を導入できます。 →便利なプラグイン一覧 編集後に「既に編集されています」という注意文が出た場合 変更内容をよく確認し、更新が必要だと判断した場合は 一度編集しようとしたページを再読み込みしてから改めて編集しましょう。 改行を出来るだけしてください。 文面をそのまま続かせず、7割~8割横にいったら改行するようにしてください。非常に見づらいです。 AAを貼る時の注意 AAをそのまま貼ってはズレて目も当てられないことになります。 必ず#aa{{好きなAA}}で囲みましょう。 なお、携帯で見る場合は高確率で崩れるため、更に#exk{}で囲む(#exk{#aa{{好きなAA}}}のようにする)のをお勧めします。 編集を終了する前に必ずプレビューに目を通しておきましょう。 誤字・脱字やリンクミス、AAのずれなどをなるべく出さないようにしましょう。 別サイトの画像へのリンクは必要の無い限り張らないでください。 リンク先のサーバーに余計な負荷がかかり、相手サイトに迷惑になります。 パソコンで携帯での表示状態を確認するには WikiのページのURLの末尾に「? flag_mobilex=1」をつけると携帯版の表示になります。 編集でパソコンもしくは携帯で非表示にした時の確認などに便利です。 最後に、このWikiはマクロ鯖FHのwikiです 私的なもの(個人のブログ、HP等)を許可無く宣伝した場合、数週間の編集禁止対象になります まずはこちらをご覧ください。 +... @wikiの基本操作 用途別のオススメ機能紹介 @wikiの設定/管理 分からないことは? @wiki ご利用ガイド よくある質問 無料で会員登録できるSNS内の@wiki助け合いコミュニティ @wiki更新情報 @wikiへお問い合わせ 等をご活用ください @wiki助け合いコミュニティの掲示板スレッド一覧 #atfb_bbs_list その他お勧めサービスについて フォーラム型の無料掲示板は@bbをご利用ください 2ch型の無料掲示板は@chsをご利用ください お絵かき掲示板は@paintをご利用ください その他の無料掲示板は@bbsをご利用ください 無料ブログ作成は@WORDをご利用ください 大容量1G、PHP/CGI、MySQL、FTPが使える無料ホームページは@PAGES おすすめ機能 気になるニュースをチェック 関連するブログ一覧を表示 その他にもいろいろな機能満載!! @wikiプラグイン @wiki便利ツール @wiki構文 @wikiプラグイン一覧 バグ・不具合を見つけたら? 要望がある場合は? お手数ですが、メールでお問い合わせください。
https://w.atwiki.jp/macromill/pages/11.html
このスレはもちろん、宣伝板以外ではアフィ・宣伝禁止です。コピペも同様です。 見かけたら下記を参照に報告、削除依頼、通報を各自してください。募らないで各自ですること。 規制議論 - 5ちゃんねる掲示板 https //agree.5ch.net/sec2chd/ ※「ものすごい勢いで広告・宣伝を報告するスレ」等のスレで報告を 定期的に関係者または狂信者、学歴コンプレックスのレス乞食が湧いてきます。 生暖かい目で見守りながらスルーして下さい。 このスレはマクロミルに監視されています 日時 2018-08-17 09 21 54 ファイル名 snap120.jpg IPアドレス 113.43.175.194 リモートホスト 113x43x175x194.ap113.ftth.ucom.ne.jp Network Information [ネットワーク情報] a. [IPネットワークアドレス] 113.43.175.192/26 (マスク範囲) b. [ネットワーク名] MACROMILL-NW f. [組織名] 株式会社マクロミル g. [Organization] MACROMILL, INC m. [管理者連絡窓口] NY14628JP n. [技術連絡担当者] YH32271JP p. [ネームサーバ] [割当年月日] 2015/08/25 [返却年月日] [最終更新] 2015/09/10 15 59 10(JST) 上位情報 ---------- アルテリア・ネットワークス株式会社 (ARTERIA Networks Corporation) [割り振り] 113.40.0.0/14 (マスク範囲) 株式会社UCOM (UCOM Corporation) SUBA-468-E1O [SUBA] 113.43.175.0/24 (マスク範囲)
https://w.atwiki.jp/bokuyo/pages/65.html
SAFE_DELETE()系の#defineマクロ廃止 なぜ#defineマクロを廃止するの? const定数を使う理由と同じで、型が不鮮明であるため、なるべくC++では使わないほうがいいかと。 マクロはプリプロセス実行なので型チェックが行われませんし、名前空間も存在しません。とても危険です。 こういうの。 #ifndef SAFE_DELETE #define SAFE_DELETE(p) { if(p!=NULL) { delete (p); (p) = NULL; } } #endif #ifndef SAFE_DELETE_ARRAY #define SAFE_DELETE_ARRAY(p) { if(p!=NULL) { delete[] (p); (p) = NULL; } } #endif #ifndef SAFE_RELEASE #define SAFE_RELEASE(p) { if(p!=NULL) { (p)- Release(); (p) = NULL; } } #endif じゃあどうするの? templateを使います(キリッ そもそも、なんでSAFE_DELETE()を使うの? 便利だから。 int main(){ int* unco = new int(4);//newで確保しちゃう。 std cout *unco std endl; delete (unco);//解放しちゃう。 unco = NULL;//危険だからNULLを入れる。 return 0; } deleteで解放した後にuncoポインタが確保していた領域をさしてるのは危ないよね、ってことでNULLをいれる。 だから、deleteしたあとわざわざNULLいれるの忘れがちだから、いっそのことSAFE_DELETEマクロ作っちゃおうぜ、的な。 しかも、SAFE_DELETEなら、どんな型でもいけちゃうぜ!みたいな。だからみんな便利便利~って言って使ってるの。 この場合のint型のSAFE_DELETE関数を実際に作っちゃおう。 void SafeDelete(int* p) { if(p != NULL){ delete (p); (p) = NULL; } } int main(){ int* unco = new int(4); std cout *unco std endl; SafeDelete(unco); return 0; } こんな感じかな?もし引数の「int型のポインタの参照」をみて吐き気がしたならきっとぼくと友達になれるかも。 ↓これでいいんじゃね?と思ってる人、 void SafeDelete(int* p)//p = 0x1b。代入! { if(p != NULL){ delete (p);//0x1bに確保されたint型のデータ(=156)をdelete (p) = NULL;//0x1bにNULLを入れる。←意味ない。本来なら0x3fにNULLをいれなきゃ。 } } int main(){ int* unco = new int(156);//uncoが指すアドレスは0x1b, unco自体のアドレスは0x3f SafeDelete(unco);//SafeDeleteに、「0x1b」を渡した return 0; } これを動かすと、SafeDelete(unco)をしても、uncoにはNULLが入ってません。残念。 なので、SafeDelete(int* )のように、引数は「ポインタの参照」を使うのです。 深く考えずに、こう考えるのが早い? void SafeDelete(int x) //これじゃだめ。(int x)をパラメータにする { x = 0; } int main(){ int Number = 4; SafeDelete(Number); return 0; } SafeDeleteを使って、Numberに0を入れたいんだけど、これどう考えても、0入らないよね。 だから参照を使ったの。「"int"型」から「"int型のポインタ"型」に変わっただけ。 っていうか、どうでもいいことかきまくりだね。 で、これを元にSafeDelete関数をtemplateで書いちゃうだけ。 「int」の部分をどんな型でもいけるようにtemplate使って書き変えちゃうだけ。 template typename T void SafeDelete(T* p) { if(p != NULL){ delete (p); (p) = NULL; } } ね、簡単でしょ? そんでもってインライン関数化。 #defineマクロと同じようになるべくプリプロセスあたりで展開してコードを置き換えてもらいたい願望。 そこでインライン関数を使うことに。 インライン関数なら、プリプロセスではないけどコンパイル時に展開してコードに置き換えられるからとても便利。 短いコードじゃないとなかなかインライン化されないけど、これくらいならきっとコンパイラたんがなんとかしてくれるはず。 template typename T inline void SafeDelete(T* p){ if(p != NULL) { delete (p); (p) = NULL; } } これで#defineマクロと同じくらいパワフルな関数ができました。 (なんか「パワフルな~」ってgems的な言い方だよね) たぶん完成。はぴはぴはっぴー。 template typename T inline void SafeDelete(T* p){ if(p != NULL) { delete (p); (p) = NULL; } } template typename T inline void SafeDeleteArray(T* p){ if(p != NULL) { delete[] (p); (p) = NULL; } } template typename T inline void SafeRelease(T* p){ if(p != NULL) { (p)- Release(); (p) = NULL; } } もうこれを機に#defineマクロを使わないようにしようね。お兄さんとの約束。 もう一度考察してみた SAFE_DELETEマクロでは「if(p){}」とあるように、NULLポインタをdeleteしないようにしてある(のが一般的)。別にdelete演算子にNULLポインタ渡しちゃっていいんじゃない?無害でしょ? delete演算子にNULLポインタを渡しても何も起きないのがC++の仕様らしいけど詳しくは知りませんの。 ということでC++の標準規格に従ってみよう。 ISO/IEC 14882の規格を見てみると 5.3.5 - Delete [expr.delete] 2 (中略)In either alternative, if the value of the operand of delete is the null pointer the operation has no effect. とある。英語が不得意なことを忘れていたので改めて、JISX3014でこの項目を見てみると 5.3.5 delete式 2 (中略)いずれの形式であっても, deleteの演算対象の値が空のポインタの場合, その演算の効果はない. とのこと。つまり、NULLポインタをdeleteしても何も起こりませんよ、と規格で保障されている。 ということは、safe_deleteにはif(p != NULL)の処理はなくてもかまわないと思える。 ただ、COMで使われる参照カウンタのReleaseの場合、話は別。あれはMSの方針に従うべき。 備考 templateを使うと、型の数だけ関数が作られて実行ファイルが大きくなっちゃうよね。オーベーヘッドになりかねないから、defineマクロのほうがよくない?って意見も考えられなくはない。 必ずしも、inline関数がインライン化されるとは限らない。コンパイラによる。 inline関数はちょっとした定義のものじゃないとインライン化されない。 #defineマクロはプリプロセッサ命令、コンパイル前の段階で展開され置き換えがおきる。 inline関数だと、コンパイル段階で展開され置き換えられる。 NULL使ってる時点で#define廃止できてないよね。可読性のためにNULL使ってるだけで、実際は、0とかに置き換えたほうがいいかと思われ。 SAFE_DELETE_ARRAY()みたく配列を解放するときの使い分けが面倒。 boost/array.hpp を使えばおk。boost shared_arrayとか便利よ。 もしくはSTLとか。vectorさんなら配列みたく使えるぴょん。 いっそスマートポインタ使えばよくない?うん、エレガントなコードに期待してるよ。 参考文献 MSDN - C/C++ Preprocessor Reference(英語) ISO/IEC 14882 1998http //www.kuzbass.ru 8086/docs/isocpp/ - C++の規格書 ISO/IEC 14882 2003日本工業規格JIS X 3014 2003http //www.jisc.go.jp/でJIS番号"X3014"でデータベース検索 個人的な話、chromeだとうまく表示ができなかった。IEだとうまく見れた。
https://w.atwiki.jp/claunch/pages/19.html
バージョン 2014/01/12 CLaunch Ver.3.24 リリース +... Windows 7環境でClAdminからCLaunchを起動すると、起動したアプリケーションから子プロセスが起動出来なくなる不具合を修正 Windows 7環境でインストール後に自動起動されたCLaunchにおいて、上記と同様の現象が発生する不具合を修正 2014/01/10 CLaunch Ver.3.23 リリース +... 管理者権限で実行されているアプリケーション上でのマウス操作、およびホットキーを有効化する起動モジュール「ClAdmin」を追加 インストール時のスタートアップオプションに「ClAdminから起動する」を追加 ボタンのプロパティに「右クリックでシェルのメニューを表示する」オプションを追加 プログラム起動時のパラメータにクリップボード置換タグ clipboard を追加 特殊アイテムに「ディスプレイの電源を切る」を追加 Windows 7以降でフォルダ余白のクリックファンクションに対応 「マウス関連処理の優先度を上げる」オプションを「クリック」と「サークル」の個別設定に分割 スタートメニュー配下のフォルダは、メニュー展開時にAll Usersとログインユーザーのフォルダをマージして表示する仕様に変更 フォルダ展開メニューの展開オプションに「/is」、「/il」を追加し、「/ni」を「/in」に変更 フォルダ展開メニューの拡張子ソート指定時に、フォルダを名前順でソートする仕様に変更 フォルダ展開メニュー内のzipファイルをフォルダ扱いでソートしない仕様に変更 JPEGフォーマットのスキン画像ファイルに対応 スキンパーツの固定表示領域が、パーツ全体のサイズよりも大きい値に設定されている場合の描画挙動を改善 マウスボタンの同時押し操作で表示した後、CLaunch内をクリックすると、マウスボタンが押されたままの状態になる不具合修正 ボタンのプロパティで「既に起動している場合の処理」を「アクティブ化」に設定すると、稀にアイテムが起動できなくなる不具合修正 Windows 8でフォルダ展開メニューのアイコンが正しく表示されない不具合修正 「クリップボード起動」および「既に起動している場合の処理」の実行後に、「アイテム起動後に表示モード1へ切替える」のオプション設定が機能しない不具合修正 ボタンに登録されているコントロールパネル内のアイテムが、アップデート時に別のアイテムへ変化する不具合修正 その他細部仕様変更、および軽微なバグ修正 2012/08/03 CLaunch Ver.3.22 リリース +... キーボードショートカット、マウスショートカットの割り当て機能に「フォルダを開く」、「このフォルダを開く」および「パス名をコピー」を追加 マウスショートカットにマウスボタン同時押しのクリック操作を追加 エッジファンクションの認識範囲の設定を追加 特殊アイテム「フォルダ展開」のプロパティに「メニュー展開の対象」オプションを追加 スキンXMLファイルにフォルダ展開メニューの影の領域指定を追加 マウスポインタがCLaunchのウィンドウ上にあるときは、クリックファンクションへの割り当て機能を実行しない仕様に変更 テキスト形式のパス名前後に改行やスペースが付加されている場合の、クリップボード起動の動作を改善 フォルダ展開メニューで「親フォルダを展開」を実行すると低頻度で異常終了するバグ修正 アイテムの同時起動時に「既に起動している場合の処理」が機能しないバグ修正 その他細部仕様変更、および軽微なバグ修正 2012/02/21 CLaunch Ver.3.21 リリース +... 「クリップボード起動」機能追加 キーボードショートカット、マウスショートカットの割り当て機能に「クリップボード起動」を追加 特殊アイテムに「フォルダ展開」を追加 ボタンの並べ替え機能追加 「ごみ箱のアイコンを定期更新する」オプション追加 CLaunch起動時にShiftキーが押されていたら自動起動をキャンセルする機能追加 旧仕様のスキン適用時の互換性を改善 サブメニュー展開位置の仕様を変更 サブメニュー展開中のフォルダアイテムをクリックした際に、サブメニューが閉じる仕様を廃止 「ページ切替え操作を反転させる」オプション廃止 タブのマウスオーバーでページ切り替えをすると、ウィンドウの描画状態が更新されなくなるバグ修正 64-bit版で共有フォルダ内のドキュメントファイルをボタンに登録すると、フォルダアイテム扱いになるバグ修正 非常駐モードで起動後にフォルダ展開メニューからアイテムを起動すると、自プロセスが終了できなくなるバグ修正 その他細部仕様変更、および軽微なバグ修正 2012/01/11 CLaunch Ver.3.20 リリース +... フォルダのメニュー展開表示の仕様を全面変更 オプションに「メニュー」を追加 オプションの「キーボード」、「マウス」にフォルダ展開メニューの設定項目を追加 フォルダを登録したボタンのプロパティに「マウスオーバーで自動展開する」オプション追加 メニュー展開オプションに「/w」、「/r」、「/c」、「/i」を追加 スキンXMLファイルのフォルダ展開メニュー関連の仕様を変更 フォルダのメニュー展開時に、Ctrlキー同時押しでアイコンを非表示化する機能を廃止 テキスト設定の影の種類に「縁取り」を追加し、スキンXMLに同項目を追加 テキスト設定に「影の透過率」および「影の幅」の設定を追加し、スキンXMLに同項目を追加 スキン選択ダイアログBOXをオプションダイアログBOXへ統合し、テキスト設定のリセットボタンを追加 オプションダイアログBOXでのデザイン設定時に、変更内容を本体ウィンドウでプレビューできる仕様に変更 同一マウスボタンのダブルクリック、トリプルクリックに機能を割り当てた場合の、トリプルクリックの動作を改善 メニュー展開設定のフォルダアイテムを、長押し系のマウス直接起動からオープンできないバグ修正 フォルダ展開メニューのフォントに、太字、斜体の設定が反映されないバグ修正 スキン変更時に、フォルダ展開メニューのフォント設定がスキン側のデフォルト設定で初期化されるバグ修正 Unicode版で、ブラウザからリンクをドラッグ&ドロップ登録すると文字化けするバグ修正 同時起動を設定したアイテムで、メニューからの特権レベル変更指定、およびフォルダのオープン方法指定が機能しないバグ修正 その他細部仕様変更、および軽微なバグ修正 2011/09/12 CLaunch Ver.3.12 リリース +... フォルダ展開メニュー上で表示したコンテキストメニューが、展開したメニューの裏側へ隠れる不具合修正 親フォルダをメニュー展開した際、メモリーリークが発生するバグ修正 2011/09/04 CLaunch Ver.3.11 リリース +... 「既に起動している場合の処理」の「アクティブ化」に、「非表示化ウィンドウを復元する」オプション追加 タイトルバー、およびトレイアイコンのマウスショートカットに、操作の種類を追加 ボタンのマウスショートカットに全体制御系の機能を割り当てた場合は、ボタンエリア内の操作も対象とする仕様に変更 親フォルダを開いた後に、表示モード1への自動切替え設定が適用される仕様に変更 一部特殊フォルダの親フォルダがオープンできない不具合修正 UNCパスのルートがメニュー展開できない不具合修正 その他細部仕様変更、および軽微なバグ修正 2011/07/04 CLaunch Ver.3.10 リリース +... ボタンのプロパティに特権レベルの設定追加 プログラムのボタンのコンテキストメニューに「管理者として実行」および「標準ユーザーとして実行」を追加 特殊フォルダのボタンに設定した個別パラメータを、ファイラーのコマンドラインへ渡す機能追加 ツールチップの横幅制限オプション追加 CLaunch起動時に他のアプリケーションのウィンドウが最前面化される不具合修正 タブ幅を固定しない設定でページ順を入れ替えた際、タブの横幅が更新されないバグ修正 タブ幅を固定しない設定でアルファチャンネル有効設定のスキンを適用すると、タブがマウスの入力を正常に受け付けなくなるバグ修正 その他細部仕様変更、および軽微なバグ修正 2011/06/10 CLaunch Ver.3.09 リリース +... 「待機表示」オプション追加 キャプションの「複数行表示」オプション追加 スキンXMLファイルにウィンドウの影の領域指定を追加 「ウィンドウロック状態でマウスポインタがウィンドウ外へ出たら最背面へ送る」オプション廃止 その他細部仕様変更、および軽微なバグ修正 サンプルスキン、スキンファイル仕様更新 言語モジュール作成用プロジェクト リリース 2011/05/15 CLaunch Ver.3.08 リリース +... キャプションの「中央揃え」オプション追加 スキンの推奨設定を、表示モード1と表示モード2で個別指定できる仕様に変更 その他細部仕様変更、および軽微なバグ修正 サンプルスキン、スキンファイル仕様更新 2011/04/29 CLaunch Ver.3.07 リリース +... アルファチャンネル有効設定のスキン適用状態で、画面色モードが32bpp以外に変更されたことを検出した場合に、非スキンモードへ自動変更する仕様を廃止 2011/04/28 CLaunch Ver.3.06 リリース +... スキンXMLファイルにロックマーカーの描画Z順位指定を追加 フォルダ展開メニュー内のフォルダを、設定されているファイラーでオープンする仕様に変更 ボタンを移動する際、移動元と移動先との間に空白ボタンがあると異常終了するバグ修正 その他細部仕様変更、および軽微なバグ修正 サンプルスキン、スキンファイル仕様更新 2011/02/25 CLaunch Ver.3.05 リリース +... エッジファンクションに「マウスボタン押下中のみ表示」オプション追加 フォント設定ダイアログBOX、およびスキンXMLファイルにテキスト描画のアンチエイリアス指定を追加 特定フォント設定時のテキスト描画品質を改善 スキンでタブエリア、ボタンエリアの背景に半透明の画像を使用すると、ページ切り替えの度に透明度が低下するバグ修正 その他細部仕様変更、および軽微なバグ修正 サンプルスキン、スキンファイル仕様更新 2011/01/21 CLaunch Ver.3.04 リリース +... 言語モジュールの選択機能追加 自動起動、および同時起動アイテムリストの並べ替え機能追加 CLaunchのプロセス優先度設定オプション追加 ホイール押下中のサークル無効化オプション追加 フォルダ登録ボタンへの右ドロップ時のメニューに「更新コピー」を追加 ウィンドウフレーム、および背景に半透明の画像を使用したスキンをサポート ボタン移動時、およびボタンロック時の挙動を変更 単一ボタンデザインのスキン適用時、2ページ目以降のボタンのテキスト色を変更しても設定が反映されないバグ修正 その他細部仕様変更、および軽微なバグ修正 サンプルスキン、スキンファイル仕様更新 2010/11/27 CLaunch Ver.3.03 リリース +... 設定ファイルの文字コード自動変換機能追加 スキンに表示モード切替えボタンの指定を追加 スキンXMLファイルのシステムボタン要素を省略可能な仕様に変更 ANSIバージョンでスキンを変更すると異常終了する場合のあるバグ修正 スキンを変更するとシステムボタンのツールチップが表示されなくなるバグ修正 その他細部仕様変更、および軽微なバグ修正 サンプルスキン、スキンファイル仕様更新 2010/11/20 CLaunch Ver.3.02 リリース +... アルファチャンネルを使用したスキンを適用すると、2ページ目以降のボタンがクリックを受け付けなくなるバグ修正 タブ、ボタン、およびシステムボタンの半透過ピクセルが正しく描画されないバグ修正 非アクティブ時のみ透明化設定で、アクティブになっても透明化状態が解除されない現象を改善 その他細部仕様変更、および軽微なバグ修正 2010/11/15 CLaunch Ver.3.01 リリース +... 未登録のボタンを移動すると異常終了するバグ修正 ウィンドウロック中にボタンの移動が出来ないバグ修正 コメント要素の無いスキンファイルを読み込むと異常終了するバグ修正 アップデート時にコントロールパネル内アイテムの登録順が入れ替わるバグ修正 その他細部仕様変更、および軽微なバグ修正 2010/11/11 CLaunch Ver.3.00 リリース +... スキン機能追加 ボタン、タブ移動時の表示効果を追加 別フォルダからの多重起動を許容する仕様に変更 プラグインインターフェース関数の仕様を一部変更 プログラムアイコン、およびトレイアイコンのデザイン変更 タブ、ボタン背景のビットマップ画像選択機能を削除 ロックされているボタンに隠れたボタンのショートカットキーが反応するバグ修正 その他細部仕様変更、および軽微なバグ修正 ウィンドウ操作プラグイン Ver.1.08 リリース プラグイン開発キット Ver.1.06 リリース 2010/07/22 CLaunch Ver.2.78 リリース +... リソースリークが発生するバグ修正 その他細部仕様変更、および軽微なバグ修正 2010/06/27 CLaunch Ver.2.77 リリース +... Unicode版リリース CLaunch終了時の自動起動が機能しないバグ修正 その他細部仕様変更、および軽微なバグ修正 2010/04/09 CLaunch Ver.2.76 リリース +... チルトホイールへのマウスショートカット割り当て機能追加 一部の特殊フォルダを登録したボタンで、シェルのコンテキストメニューを表示させると異常終了するバグ修正 ページ位置を変更したときに、自動起動の設定情報が追従して更新されないバグ修正 Windows Vista以降で、省電力モード移行時の自動起動が機能しない不具合修正 UAC環境でスクリーンセーバー停止アイテムを実行しても、ディスプレイの自動電源OFFを抑止できない不具合修正 その他細部仕様変更、および軽微なバグ修正 ウィンドウ操作プラグイン Ver.1.07 リリース 2009/12/16 CLaunch Ver.2.75 リリース +... 「ウィンドウロック状態を記憶する」オプション追加 「抑止モード状態を記憶する」オプション追加 その他細部仕様変更、および軽微なバグ修正 2009/11/28 CLaunch Ver.2.74 リリース +... コマンドラインオプションの「/n」および「/l」指定時に、前回の表示位置へ初期表示する仕様に変更 CLaunch終了時の自動起動処理中に異常終了するバグ修正 その他細部仕様変更、および軽微なバグ修正 2009/10/12 CLaunch Ver.2.73 リリース +... ウィンドウサイズの変更中にマウスポインタが通常カーソルへ戻ってしまうバグ修正 特定のタイミングで操作を行うと、それ以降ウィンドウの表示が更新されなくなるバグ修正 その他細部仕様変更、および軽微なバグ修正 2009/09/13 CLaunch Ver.2.72 リリース +... ボタンプロパティの「既に起動している場合の処理」に詳細オプション追加 特定のコントロールパネル内アイテムを登録すると、設定ファイルのデータが破壊されるバグ修正 アイコン表示サイズを変更すると、再起動するまで正常動作しなくなるバグ修正 その他細部仕様変更、および軽微なバグ修正 ウィンドウ操作プラグイン Ver.1.06 リリース 2009/09/05 CLaunch Ver.2.71 リリース +... タイトルバー、タブ、ボタンの文字列、及びアイコン表示位置の微調整機能追加 表示操作グループ別にウィンドウの表示位置を設定する機能追加 前回表示位置、及び固定座標への表示設定追加 右クリック系のマウスショートカット操作時に、コンテキストメニューが表示される不具合修正 その他細部仕様変更、および軽微なバグ修正 2009/08/11 CLaunch Ver.2.70 リリース +... 特殊フォルダ、およびコントロールパネル内アイテムのドラッグ&ドロップ登録に対応 ブラウザからのドラッグ&ドロップによるURL登録に対応 登録ボタンをドラッグして、他のボタンまたは他のアプリケーションへドロップする機能追加 登録アイテムに対応するシェルのコンテキストメニューを表示する機能追加 フォルダ登録ボタンへの右ドロップ時に、ショートカットを作成する機能追加 メインメニューの「メンテナンス」に、「データフォルダを開く」コマンド追加 対象ファイルが存在しない場合でも、親フォルダをオープンできるよう変更 複数回押しのホットキーに割当てたキーを押し続けると、割り当てアイテムが起動する不具合修正 ボタン登録ダイアログBOXから、コントロールパネル内アイテムの登録機能を削除 その他細部仕様変更、および軽微なバグ修正 2009/07/05 CLaunch Ver.2.69 リリース +... 64ビット版リリース 保護モードのInternet Explorer上で、ホットキーが機能しない問題に対応 ダイアログBOXに表示される文字列の一部が、実際の内容と一致しないバグ修正 64ビット版Unicode対応のためのソース改変 その他細部仕様変更、および軽微なバグ修正 ウィンドウ操作プラグイン Ver.1.05 リリース プラグイン開発キット Ver.1.05 リリース 2009/06/14 CLaunch Ver.2.68 リリース +... エッジファンクションに、マウスポインタが画面端から離れたときに起動するアイテムの割り当て機能追加 マウス直接起動ダイアログBOXのレイアウトを変更 特定の2バイト文字で終わる名称のファイル、またはフォルダがボタンに登録できないバグ修正 起動時から抑止モードになっていた場合、一度CLaunchが表示されるまで抑止状態にならないバグ修正 その他細部仕様変更、および軽微なバグ修正 ウィンドウ操作プラグイン Ver.1.04 リリース プラグイン開発キット Ver.1.04 リリース 2009/06/07 CLaunch Ver.2.67 リリース +... クリック起動に「マウスポインタが移動したら長押しをキャンセルする」オプション追加 ボタンの長押し中にマウスポインタが移動した場合は、マウスショートカットの長押し判定をキャンセルする仕様に変更 Explorerが異常終了した場合に、トレイアイコンを再登録するよう変更 トレイアイコンのダブルクリックが無視される現象を改善 タスクトレイの"アイコンを変更する"オプションを解除しても、次回起動時まで設定が反映されないバグ修正 メニュー表示中に別のボタンを長押しすると、先に選択されていたボタンの親フォルダがメニュー展開されるバグ修正 その他細部仕様変更、および軽微なバグ修正 2009/06/01 CLaunch Ver.2.66 リリース +... エッジファクションへの個別アイテム割り当て機能追加 スクリーンセーバー起動、スクリーンセーバー停止機能をエッジファクションから独立させ、特殊アイテムに追加 同時起動アイテムの起動遅延時間に、マイナスの値を設定できる仕様に変更 トレイアイコンの外部ファイル割り当て仕様と、一部アイコンイメージを変更 Ctrlキー+ドラッグ&ドロップでボタンのコピーができないバグ修正 その他細部仕様変更、および軽微なバグ修正 2009/05/25 CLaunch Ver.2.65 リリース +... Windows XP SP2以前の環境へのインストール時に再起動が発生する不具合修正 同時起動、自動起動アイテムの選択ダイアログBOXで、アイテム未登録状態のときにOKボタンが無効化される不具合修正 2009/05/23 CLaunch Ver.2.64 リリース +... 保護モードのInternet Explorer上で、クリック起動が機能しない問題に対応(「処理の優先度を上げる」オプション選択時のみ) Windows 98で起動できない不具合修正 Windows 7 RC 64bitでデスクトップをダブルクリックすると異常終了する不具合修正 共有フォルダのボタンプロパティで、フォルダの表示方法が選択できない不具合修正 その他細部仕様変更、および軽微なバグ修正 2009/05/18 CLaunch Ver.2.63 リリース +... Windows VistaのUAC有効設定の環境で、設定更新ができない不具合修正 2009/05/14 CLaunch Ver.2.62 リリース +... 「自動起動」オプション追加 ホットキーとショートカットキーの入力回数設定、および関連オプション追加 Shift、Ctrl、Altキーの単独押しを、ホットキーおよびショートカットキーへ割り当てられる仕様に変更 最前面表示設定のときは、タスクバーとオーバーラップする位置へ初期表示する仕様に変更 ドキュメントファイルのプロパティで、「優先度」または「既に起動している場合の処理」を変更した場合の起動不具合を一部改善 レジストリバージョンからの設定変換時、コントロールパネル内アイテムの登録データが正しく変換できないバグ修正(Setup.exe) その他細部仕様変更、および軽微なバグ修正 2009/05/01 CLaunch Ver.2.61 リリース +... 一部のアプリケーションが起動できない不具合修正 16ドットおよび32ドットのアイコン取得処理を改善 2009/04/27 CLaunch Ver.2.60 リリース +... ボタンのプロパティに「優先度」オプション追加 ボタンにビットマップ背景を設定すると、ボタン押下時の背景が描画されなくなるバグ修正 その他細部仕様変更、および軽微なバグ修正 プラグイン開発キット Ver.1.03 リリース 2009/04/23 CLaunch Ver.2.59 リリース +... プログラム、およびドキュメントファイルを登録したボタンのプロパティに、「既に起動している場合の処理」オプション追加 システム側の設定でフォルダのアイコンが変更されている場合は、フォルダボタンにも同じアイコンを使用するように変更 ファイラーへ渡すパス名が2重に""で囲まれていたバグ修正 その他細部仕様変更、および軽微なバグ修正 2009/04/09 CLaunch Ver.2.58 リリース +... 設定データの保存先をレジストリから設定ファイルに変更 登録アイテムの相対パス指定に対応 クリック系起動操作にトリプルクリックと長押しを追加 クリック系起動操作にサイドボタンとその他のマウスボタンとの組合せを追加 クリック系起動操作の有効範囲にタイトルバーを追加 表示モードの切替え機能追加 「アイテム起動後に表示モード1へ切替える」オプション追加 マウスショートカットの設定追加 ボタンのロック機能追加 ボタンのプロパティに同時起動アイテムの設定追加 フォルダを登録したボタンにファイルをドラッグ&ドロップした際の動作設定を追加 ボタン登録ダイアログBOXにウィンドウ参照機能追加 ボタン登録ダイアログBOXで選択できる特殊フォルダの種類を追加 相対パス、および絶対パスへの一括変換機能追加 「アイテム登録時に相対パスへ変換する」オプション追加 キーボードショートカット、および特殊アイテムに「CLaunch終了」を追加 ホバー状態と通常状態で別々のビットマップ背景画像を指定できる仕様に変更 ウィンドウロック、抑止モードの状態を記憶する仕様に変更 シフトキーを押さずにページ移動ができる仕様に変更 マルチモニタで画面端に段差ができる環境では、双方の画面端をエッジとして認識する仕様に変更 サイドボタンのシングルクリックにアイテムを割り当てた場合、デフォルト動作の「戻る」、「進む」を無効化する仕様に変更 マイコンピュータをデフォルトのソート設定でメニュー展開したときは、ドライブ名順にソートする仕様に変更 ボタン移動時の挙動を、「空白を自動で詰める」オプション設定に応じて切替える仕様に変更 プラグインインターフェースの仕様を一部変更 デスクトップ右ダブルクリックの反応を改善 一部の関連付けアイコンが表示されない問題を改善 サークルオプションで「処理の優先度を上げる」が選択されていると、環境によっては起動できなくなる不具合修正 Windows Vista環境で一部のコントロールパネル内アイテムが起動できない不具合修正 ファイルをドラッグしながらエッジ表示させると、ドラッグ状態が解除されてしまう不具合修正 デスクトップをメニュー展開した後に異常終了するバグ修正 非常駐モードでオプションの「エッジ」タブを表示させると異常終了するバグ修正 デスクトップ、またはフォルダの余白と、「どこでも」を同じマウス起動操作に割り当てた場合、「どこでも」への割り当てが機能しなくなるバグ修正 アイコン変更ダイアログBOXで「.ico」ファイルが指定できないバグ修正 その他細部仕様、内部処理の大幅変更 ウィンドウ操作プラグイン Ver.1.03 リリース プラグイン開発キット Ver.1.02 リリース
https://w.atwiki.jp/visiovba/pages/18.html
4種の命令とプロシージャ まだ作成予定しかないけど、方針だけメモ 方針 以下の違いと使われ方について調査、メモする。 プロパティ メソッド ステートメント 関数 プロシージャ Amazon.co.jp ウィジェット まとめ とりあえず国語と絡めるとわかるかも? プロパティ "主語"、"目的格"、"この語の後には数詞が続く"などの分類・性質。 メソッド "動く"、"走る"、"描く"などの動きを表す単語、要するに動詞や述語。 ステートメント "てにをは"や、"To be Continued"などの助詞や定型句。 関数 "~だろう"、"~ない"、"~したい"など、付加することで同一のニュアンスを付加する助動詞。 プロシージャ "いつもお世話になっております。"などの定型文や、メールの署名などのテンプレート。 ……うん、むしろ難しくなったかな。 ちなみに、上記例で当てはめるなら、『変数』は代名詞、『定数』は名詞、あたりに相当するだろうか。 マクロではステートメントは記録されない(≒"てにをは"は存在しなくても意味は通じる)という意味では実言語に似てる気がする。 プロパティ とりあえず参考サイト MSDN Microsoft Office Visio オートメーション リファレンス プロパティ プロパティとはなんじゃらほい プロパティというのは、あるオブジェクトにおける性質だとか特質、属性、特性といったものをひとくくりにした概念である。 よって、プロパティを変更すれば、そのオブジェクトの特性は変化する事となり、見た目や取り扱われ方に変化が生じる事となる。 ただ、こいつが曲者で、一つのオブジェクトが持つプロパティはすさまじく多い、そのうえ、すべてのオブジェクトが同じプロパティを持っているわけでもない。 マウスとキーボードを使う感覚で、VBAで同じ操作をしようとしてもうまくいかないのは大抵どこを変更したらいいかよくわからないという部分に由来している。 例えば、".Collor"というプロパティがある。 このプロパティはシェイプなどの背景色情報を格納していて、そのプロパティに色情報を代入する事でシェイプを指定した色で塗りつぶしたりできるわけだ。 単純に考えて、そういうプロパティなんだってわかってしまえば、あとは色を変えたい対象を指定して、その末尾に".Collor"つけて色指定すればいいだけだし、色変えるの簡単じゃーん! ――とか思うわけだが、実際にはそううまくいかない。 例えば".Charactor.Text"プロパティはシェイプに記述されたテキストを示すが、これを".Charactor.Text.Collor"と記述したところでテキストの文字色は変えられない。 テキストの色を変えるには".CharProps"プロパティに文字色を表す定数を指定し、そこに色情報を代入するという手順を踏まないといけないし、コネクタの色を変えるには".CellsSRC"プロパティに色を定義しているSection, 行, セルの定数を指定してその値に色情報を代入するという方法を取らなければならない。 ※ちなみに".CellsSRC"を使ってテキストの色を変える事もできるようだ。 確かにユーザーがマウスを使って色を変えようとするとき、シェイプ、テキスト、コネクタ(線)それぞれ押すボタン(使用するパレット)が違うので、内部処理的には全く別の行為だというのは否定のしようもないのだが、文字列側から見れば『色を付ける』という意味的集合において同一であると認識するのが自然だ。 それらを別種の処理だとプログラマが認識するためには、あらかじめプロパティについて一定の知識を持っている事が求められる。 シェイプシートとセル シェイプシートとは各シェイプごとにプロパティ値を一覧できるExcelシートのようなものだ。 対象のオブジェクトを選択した状態で、上部メニューの『ウインドウ シェイプシートの表示』と選択することで表示される。 ※ツール オプション 詳細設定タブ 開発モードにチェックを入れる事で右クリックメニューに『シェイプシートの表示』が表示されるようになる。 そして、どうやらこのシェイプシートの値はすべてVBAから操作することができるらしい。 シェイプの位置からフォントの色まで、値を手動で変えてみればわかるが、このシェイプシートを操作することでできる事は多い。 " .CellsSRC"プロパティの怪 前述した".CellsSRC"プロパティというのは引数に指定した値で参照先プロパティが変わるらしく、以下のように記述する事で、プロパティの集合領域の中から一つを選択して参照することができるらしい。 ~.CellsSRC(セクション, 行, セル) そのプロパティの定義はセクション、行、セルという形態で指定できることから、Excelシートのような場所に定義されていると想像できるわけだが、ここで思い出すものがある。 シェイプシートだ。 シェイプシートを見ればわかるが、Excelでセクションごとに分けられた各セルに位置情報やフォントサイズが格納されており、これはまさしく" .CellsSRC"プロパティの参照先なのではないか!?と思ってしまうわけだが、そうは問屋が卸さないのである。 次のコードを見てほしい。 .CellsSRC(visSectionObject, visRowLine, visLineColor) これはオブジェクトの線の色を定義している領域にアクセスする際の指定子である。 ではオブジェクトのシェイプシートを見てみよう。 いかがだろうか、セル名はなんとかわかるが、セクション名と行名がイマイチかみ合わないのがわかるだろうか。 これのおかげで、すんなりと目的のプロパティをいじくれないストレスがすごい。 ただ、プログラミング言語というものには、往々にして設計者の哲学やらポリシーがあるもので、それが理解できるくらいに習熟すると、ある日、ストレス源としか思えないような無駄と思われた構造に一つの規則性が見えてスッキリしたり、設計者のセンスに感動したりもする。 もちろん、中にはそんな事関係なく、旧バージョンに新しい機能上乗せ、上乗せしてるうちにカオスになったりしてる場合もあるので、あまり期待してもしょうがないが、新しい言語を学ぶ側としては、哲学やポリシーの存在は習得における重要な道しるべとなりうるのでVBAがそのような言語であることを祈るばかりだ。 ともかく、我々はそれがどんなクソであろうとも" .CellsSRC"プロパティを使いこなす必要があることは事実だ。 各プロパティについては基本的にあまり触れる予定はないのだが、紹介した手前、参考程度に紹介しておく。 以下は先に紹介した" .CellsSRC"プロパティの書式だが、 ~.CellsSRC(セクション, 行, セル) ()の中にある"セクション"、"行"、"セル"が取りうる値は定数としてあらかじめ決められており、その定数により、どのプロパティを操作するかを表現できる。 取りうる定数の一覧はMSがリファレンスとして公開しているので、そちらを参照してほしい。 ◆セクション VisSectionIndices の定数 ◆行 VisRowIndices の定数 ◆セル VisCellIndices の定数 このほかにもプロパティには様々なものがある。 それぞれに使い道と使い方があるので、やりたいことを実現するのに必要なプロパティだけでも覚えておきたい。 本項目の最初に紹介した参考サイトにプロパティのリファレンスがあるので、マクロで使用感をつかみつつ使い道を探りたい。 メソッド とりあえず参考サイト MSDN Microsoft Office Visio オートメーション リファレンス メソッド メソッドたぁなんぞや メソッドというのは、コンピューターに対するいくつかの命令によって定義される一群の処理を、意味的にも単語数的にも一つの"命令"として扱うための仕組みがあり、その仕組みによって作られた"命令"のうち、あらかじめソフトウェア側で用意されたもの……といったところでしょうか。 ごちゃごちゃ書きましたが、要はオブジェクトに動作指示をするためのコマンドです。 動かしたいなら".Move"ですし、追加したいなら".Add"です。 なんでそんなごちゃごちゃ書いたかと言えば、MoveやAddという単語が人間にもたらすイメージは1つに収束しますが、コンピューターの視点から見れば、Moveするにもいくつもの命令を処理しなければならないという人間とコンピューターの違いを踏まえる必要があるからです。 これはあとで解説する"プロシージャ"の理解において重要な事柄なので、あなたがマウスで動かす単純な操作もコンピューターから見れば複雑な行為なのだという事だけは理解しておいてください。 プロパティと同じく、こいつも階層構造の中に格納されていて、やはりオブジェクトごとに使用できる種類が違う。そして、すごいたくさんあるという点も同じだ。 メソッドの利用・記述方法 メソッドはプロパティと同じく階層構造の中に収容されているわけですが、同時に"プロシージャ"であり"サブルーチン"でもあることから"Call"ステートメントによって呼び出す方法も使用できてしまう、というより"Call"ステートメントで呼び出す方が明示的で良いっぽい。。。 何を言っているかわからないかもしれないが、私もわからなかった。 情報精度の検証はすべてが終わってからするとして、ざっくりと説明すると、"メソッド"、"プロシージャ"、"サブルーチン"というのは何を基準としてソレを表現するか、という点で呼び名が変わっているに過ぎない。例えるなら"室内猫"、"ネコ科"、"お隣の猫"という違い程度のものだ。それぞれは同じ"猫"に対する呼称だが、視点ごとにソレをより的確に表現する相対的な呼称があるというだけの話だ。 とはいえ、横文字なおかげで非常にわかりにくい。本当にわかりにくい。無駄にわかりにくい。 "基本命令"、"命令集合"、"補処理"とか、 "既定処理群"、"独立処理群"、"外部処理群"とか……これはこれで分かりにくいな。。。 あきらめて違いがわかるまで関連サイトを読み込むことをオススメします。 さて、以下はまったく同じ動きをするコードですが、上2つはメソッドを直接利用。3つ目はFunctionプロシージャ側でメソッドを利用して、関数的に呼び出す形での記述(自分の練習用なので非推奨)となります。 ◆マクロで記録 Sub Macro4a() ActiveWindow.DeselectAll ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(10), visSelect Application.ActiveWindow.Selection.Move 0.03937, -1.948819 End Sub ◆Callステートメントで書き換え Sub Macro4b() ActiveWindow.DeselectAll ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(10), visSelect Call Application.ActiveWindow.Selection.Move(0.03937, -1.948819) End Sub ◆オマケ(Functionの練習) ※変数型はObjectでも動くし、Variant型ならSetステートメントもいらない。 Sub Macro4c() Dim objSelection As Selection ActiveWindow.DeselectAll ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(10), visSelect Set objSelection = test(0.03937, -1.948819) End Sub Function test(x As Integer, y As Integer) As Selection Application.ActiveWindow.Selection.Move x, y Set test = Application.ActiveWindow.Selection End Function なんか他にもある気がしてきた。 とまあ、この違いのおかげで、あれ?これはメソッド?ならこっちの書き方でイケる?あれ駄目か?じゃあプロパティか?違った関数か……みたいな迷路に迷い込むわけです。 なお、この違いこそが、Visio VBA基礎知識の『要素だけでなく動作も階層の中に』項目で登場する".Move"に関わるお話の調査結果……という事になります。 以下調査中 ステートメント とりあえず参考サイト Office TANAKA - Excel VBAステートメント[目次] ステートメントぉ? 声明だとか、発表、陳述、などと訳される言葉だが、プログラミングにおけるこのステートメントに対する個人的なイメージとしては『機械の言葉と人間の言葉を分かつ境界線』といった所だろうか。 実際、ExcelやらVisioの"マクロの記録"による記述ではこのステートメントは登場しない(※1)。 例えばある操作を5回繰り返す事を考えたとき、"マクロの記録"では単純に同じ操作を5回記述するのが関の山だが、人間はこのステートメントを駆使する事で反復処理という高次な処理に昇華することができる……といった具合だ。 これは、ユーザーの判断の結果としての一連(一続き)の操作を記録する"マクロの記録"と、ユーザーの判断の一部もプログラムに任せてしまおうという"プログラミング"の違いに由来している。 例えば、シェイプが"Decision"だったら赤色に、"Process"だったら青色に塗る事を考えたとき、"マクロの記録"ではそこにあるシェイプが"Decision"であることを判断するのは人間だが、"プログラミング"ではコンピューターに任される。 さらに言えば"マクロの記録"ではそれが"Decision"だったら、とか"Process"だったらとかいう判断も存在しない。単に"ユーザーが選択したID:XXのシェイプ"の色を変えるだけだ。そのためそのIDを持つシェイプを削除してしまえば、もうこのマクロはただのゴミになってしまう。 プログラミングではそうした応用力の無いマクロに応用力を持たせ、人間らしい判断を伴う動作を実現するにあたり、"ステートメント"が重要な役割を占めている。。。と私は感じる(笑)。 ちなみに、上記の動作を実現する際、プログラミングで使われるステートメントはたぶん"If...(Then...)Else"とか、"Select Case"とかだろう。 ※1 調べたら"Sub"とか"End"もステートメントなので、厳密には登場する。 が、それは例外というやつなので基本的には登場しない認識でOK。 ステートメントはどこにある? プロパティにしろメソッドにしろ、階層構造の中にある(階層構造で記述する必要がある)と解説したが、ステートメントもやはり階層構造の中にあるのだろうか? 答えは否だ。 究極的には"プログラミングの仕様"の中という事になるが、先のプロパティやメソッドに関する説明(階層構造の中~云々)と同じ次元で説明すれば、ステートメントはプログラミング上ではそれ単体で存在する独立した存在だ。 それ単体で存在し、他の要素に方向性を示す。。。という感じか。 信号機とか、標識みたいなものだと思っておけばよい。 基本的なステートメント こればっかりはマクロに頼るわけにいかないし、作るたびにリファレンスを引く……というのも効率が悪い。 よく使うのだけでも覚えろ! No. ステートメント 役割 01 Sub Subroutineの頭文字。じゃあMainroutine用のステートメントがあるかと言えば無い模様。 02 End Sub Subプロシージャのおしまいを示す。 03 Dim 変数を宣言するお約束。これの使い方くらいは自分で調べて。 04 Set Object型変数に値を代入する時は他の非Object型変数で"="を使って値を代入するのに加えて行頭にこのステートメントが必要になる。 05 Call 呼んで字のごとく、何かを呼び出すためのステートメント。その"何か"はいわゆるサブルーチンだとか、メソッドだとかが属するプロシージャである。具体的には自分以外の"Sub"プロシージャとか、"Function"プロシージャ、あとはメソッドなんかがコレによって呼び出される。 06 If Then 条件分岐の王様。プログラミングやってれば最初に覚えて最初に理解できて、最も汎用性にあふれるステートメントの優等生。 07 For Next 明示的に回数を指定して反復処理させるときはコレ。 08 For Each 次の項で説明してるのでそちらを参照。 ステートメントの使い方 For Eachステートメント 以下はFor Eachステートメントのテストプロシージャ。 選択したシェイプのテキストを選択した順番に結合してメッセージボックスに表示する。 ここまで勉強した内容でパパっと書いてみたら奇跡的に一発で動いて感動したので掲載。 Sub ForEachTest() Dim objText As String Dim objMember As Object For Each objMember In Application.ActiveWindow.Selection objText = objText + objMember.Characters.Text Next objMember MsgBox objText End Sub 要するに"For Each"の後の変数"objMember"は"In"の後ろに来る複数のオブジェクトグループに属する個別のオブジェクトを格納するためにあります。 For Each 単体オブジェクト In 複数オブジェクト 単体オブジェクトに対する処理内容 Next 単体オブジェクト という感じ。 処理対象は"In"の後ろに来るグループに含まれるオブジェクトの一つ(メンバー)で、最初の処理対象となるメンバーはどうやら最初に選択したオブジェクトになる模様。 以下の画像ではシェイプ内のテキスト順に選択してみました。 ちなみに、マウスを使って一個一個選択するのではなく、ドラッグ操作による範囲指定で複数シェイプの一括選択を行った時はよくわからない。ある状況では常に右下がアクティブシェイプになるし、ある状況では常に右上がそうなる。内部処理的にはルールがあるのだろうが、そこまで調べる必要性が見いだせないので、ここではこれ以上追及はしない。 ちなみにちなみに、Excelの場合は"Range"範囲内のアクティブセルが最初の処理対象になるんじゃないかなぁと思っているのだが、いずれExcel VBAのWikiを作る時に検証しよう。 閑話休題。 最初のメンバーに対する処理が完了したら、"Next"ステートメントによって順次メンバーを切り替えていくのだが、ここで難しいのはその処理の部分だろうか。 objText = objText + objMember.Characters.Text "objMember"は"Application.ActiveWindow.Selection"に属する1オブジェクトを順次格納していくため、使用できるプロパティやメソッドは"Application.ActiveWindow.Selection"で使用できるものとは異なる(たぶん)。 WEB上の他のVBA解説サイトではExcelの"Range(セルの選択範囲)"オブジェクトをベースに紹介しているので、Visioでは使えないのかなぁと思ったが、"Selection"オブジェクトも複数オブジェクトだなぁと思って試したらうまい事動いたので、かなりうれしかった。 そもそも需要が少ないのが原因だろうが、VisioでFor Eachを使用するコード例を示して解説しているサイトはあんまりないので何かの役に立てば幸いだ。 ともかく、For Eachステートメントは複数のオブジェクトに同じ処理を順次実行する場合に使用できるという事のようだ。 関数 とりあえず参考サイト Office TANAKA - Excel VBA関数[目次] 関数ってあの関数? Excelをやってる人なら、当然、『あの関数?』と思うかもしれませんが、"一緒だと思っていると失敗します"。 例えば"Trim"関数とか、使い方はExcelの"TRIM"関数と全く同じなのですが、結果が違う! 以下のような文字列があったとします。 " 1 2 3 4 5 " これをExcelの"TRIM"関数を通すと、、、 となります。 一方、VBの"Trim"関数を通す場合、 Sub TrimTest() Dim TrimTest As String TrimTest = " 1 2 3 4 5 " MsgBox "原文 「" + TrimTest + "」" + vbNewLine + "結果 「" + Trim(TrimTest) + "」" End Sub という感じで使用して、結果は以下の通り。 まとめるとこう。 Excel TRIM "1 2 3 4 5" VB Trim "1 2 3 4 5" 要するに、Excelの"TRIM"関数は 前後のスペース削除 文字間のスペースは1個になるように調節 という二つの事をしているのですが、VBの"Trim"関数は 前後のスペース削除 しかしていないという事です。 他の関数も一緒だったり違ってたりしてるのでしょうが、個別に調べるのはダルいので各自必要な関数について使い方をお勉強すればよいと思います。 とはいえ、それ以外はExcelの関数と通じる部分が多いのも事実、プロパティやメソッド、ステートメントに比べればよほどとっつきやすいのではないでしょうか。 というわけで、あとはリファレンス作ってるサイトに任せた。 関数もプロシージャ? 関数もプロシージャでしょうね。 ユーザーが作成できる関数として"Function"プロシージャがありますが、"Function"プロシージャを"関数"と呼ぶ事もあるそうなので、逆説的に"関数"もプロシージャでしょう。 ここらあたりの違いについては次のセクション『プロシージャ』で解説します。 プロシージャ 結局プロシージャってなんなのさ? 一般にプログラミング界隈(?)では"手続き"と訳されるそうですが。 "複数の処理によって構成される意味的に単一な命令群"といったところでしょうか。 ただ、"意味的に単一"であることは理想であって、"プロシージャ"の定義において必須ではないというのは断っておきます。 身近な例でプロシージャに近いものというと、何かなぁ、全自動洗濯機とかかなぁ。。。 洗い桶に洗濯物を入れる 洗い桶に水を入れる 石鹸を投入する 洗濯物を攪拌・揉み混ぜる 洗い桶の水を捨てる 洗い桶に水を入れる 洗濯物を攪拌・揉み混ぜる(すすぎ) 洗い桶の水を捨てる ~略~ 洗濯物を絞る(脱水) という洗濯における各処理を 全自動洗濯機に洗濯物を入れる ボタンを押す と短縮できるのは"全自動洗濯機"というプロシージャが洗濯の各工程を"洗濯機に掛ける"という1つの処理(行為)にまとめてくれているからです。 尚、全自動洗濯機の例では"汚れた洗濯物"を渡して"洗いあがった洗濯物"を返すので、"関数"的なプロシージャという事になりそうです。引数と戻り値の話は次の次あたりの項で解説します。 さて、実際にプロシージャをどういうシチュエーションで使うかと言えば、"よく使うけど、デフォルトで用意されていない処理"を自前で作成する時に使います。この時、デフォルトで用意されている"プロシージャ"の事を"メソッド"とか"関数"、ユーザーが自前で作成した"プロシージャ"を"Sub"プロシージャとか"Function"プロシージャと呼ぶわけです。 プロシージャを作るにあたり、私がパッと思いつくのは、文字列検査とかでしょうかね。 ユーザーが入力した文字列を検査して問題が無ければ次の処理へ受け渡す……みたいな。 応募フォームだとかアンケートフォームだとかは、ユーザーに文字列なり数値なりを入力させて、それを受け取り集計するわけですが、入力された値がデータ的に正しいかどうか(電話番号が数値で記述されているか?等)の検査はどの文字列に対しても行う必要があります。 それぞれの項目ごとに個別に処理を記述していては何度も同じコードが登場する事になり、可読性が低下します。 そこで、受け取った文字列を検査して、問題があるかどうか判断して結果を返す"プロシージャ"を作成して、必要に応じて呼び出すようにすれば、文字列検査の処理は一度記述するだけで済みます。 意味的に単一な処理はすべて"プロシージャ"としてまとめ、呼び出し元となるソースコードには、その"プロシージャ"を呼び出す順番だけが記述されるようになるのが理想的ですが、まあそこまで綺麗なソースコードはそうそうないですね。 メインSubプロシージャとサブSubプロシージャ あなたが作成するSubプロシージャは先に説明した通り、呼び出す側と呼び出される側に区別する事ができます。 これはプログラミングにおいて一般的に"メインルーチン"と"サブルーチン"と区別して呼ばれるものです。 呼んで字のごとく、"メインルーチン"は主たる処理なので呼び出す側、"サブルーチン"は副たる処理なので呼び出される側です。 しかし、Visual Basic for Applications(VBA)では、Office付属のVisual Basic Editor(VBE)でやってみればわかるが、コードの書き出しはすべて"Sub"なのである。 つまり、主たる処理となるメインルーチンも"Sub"プロシージャとして記述する事になるのだが、この"Sub"は実は"Subroutine"の略なので、メインルーチンなのに"Subroutine"という意味のわからない状況に陥る。 要するにメインSubプロシージャと、サブSubプロシージャが存在することになるわけだ。 これはおそらく、そのVBAを使用するOfficeファイルをメインルーチンとして見立てているためではなかろうか?と思うのだが、詳細は設計した人に聞いてほしい。調べてもさっぱりわからん。 余談だが、変数を宣言する際に使用される"Dim"ステートメントも同様の矛盾をはらんでいる。 すなわち、"Dim"とは"Dimension(次元)"の略で、本来は"配列"を意味するが、VBAでは配列以外の変数もひとくくりで"Dim"を使用して宣言している。 勉強を始めた人間のうち、特に公式に意味を求める(voidが気になって先に進めない)タイプの人は陥りやすい罠だが、時に意味を知らない方が効率が良い要素も存在するものだ。これこそまさに『そういうものだ』と覚えておくに限る。 変数を宣言する時は"Dim"、プロシージャの開始は"Sub(あるいはFunction)"、それだけわかっていれば十分だ。 "Sub"プロシージャと"Function"プロシージャの違い 調べた限りでは戻り値があるかどうかが両者を分かつポイントのようです。 そういう意味で、両者は"メソッド"と"関数"の違いに近いですね。 比較するとこんな感じかな? 比較対象 デフォルトで用意 ユーザーが作成 引数 戻り値 Callステートメント メソッド ○ × ○ × 使用可 関数 ○ × ○ ○ 使用可、戻り値必要なら使わない Subプロシージャ × ○ ○ × 使用可 Functionプロシージャ × ○ ○ ○ 使用可、戻り値必要なら使わない ステートメント ○ × × × - 例外とかあるかもですが、とりあえずこんな感じっぽい(自信無い)。 以下更新中 Amazon.co.jp ウィジェット